關閉。這個問題需要細節或明確性。它當前不接受答案。 想改善這個問題嗎?添加細節並通過編輯此帖子來澄清問題。 1年前關閉。 改善這個問題 我正在做一些代碼挑戰,我想通過指定起始索引並從起始索引僅獲取第一個(3個或可以是任意長度)值來從數組中獲取前三個值。 我試過了這段代碼,它可以正常工作,但是代碼結構太長,因此如何使它更短,以便於理解。 整數n = 10; 雙重簽名=新的double [] {1,1,1}; double [] ret =新的double [n]; 雙和= 0; ret [0] =簽名[0]; ret [1] =簽名[1]; ret [2] =簽名[2]; int x,i; 對於(i = 0; i
2021-01-31 08:19:35
使用LINQ,您可以嘗試如下操作: var值= array.Skip(索引) 。取(n) .ToArray(); 其中index是第一個項目的索引,n是要選擇的項目數。 例如。 https://dotnetfiddle.net/Pk1rwY 作為旁注。使用LINQ並不意味著您的代碼會更快。它將更加緊湊/可讀,等等。為了評估代碼的性能,您必須使用BenchmarkDotNet之類的東西。 | 沒有Linq解決方案: 私有靜態T [] Extract(T []源,int fromIndex,int長度){ 如果(null ==源) 拋出新的ArgumentNullException(nameof(source)); 否則(fromIndex <0) 拋出新的ArgumentOutOfRangeException(nameof(fromIndex), “ From Index必須為非負數”); 否則(長度<0) 拋出新的ArgumentOutOfRangeException(nameof(length), “長度必須為非負數”); if(fromIndex> = source.Length || length == 0) 返回新的T [0]; T []結果=新的T [Math.Min(length,source.Length-fromIndex)]; Array.Copy(source,fromIndex,result,0,result.Length); 返回結果; } 然後 double []簽名=新的double [] {0,1,2,3,4,5}; double [] ret = Extract(簽名,3,2); Console.Write(string.Join(“,”,ret)); 結果: 3 4 | 根據您的問題,您需要利用.Take和.Skip運算符。 var result = array.Skip(startingIndex).Take(numberOfElements); 因此,從您的代碼看來,您正在嘗試做一些不同的事情,即求和元素。 .Sum運算符可能對您有幫助。 | 不是您要找的答案?瀏覽標記為c#數組linq的其他問題,或詢問您自己的問題。